package com.mftour.common.customLabel;

import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class PagingLabel extends TagSupport {

	private static final long serialVersionUID = -3037175426728323749L;

	private String url; // 请求URI
	private int pageSize; // 每页要显示的记录数
	private int pageNo; // 当前页号
	private int recordCount; // 总记录数

	public int doStartTag() throws JspException {

		// 计算总页数
		int pageCount = (recordCount + pageSize - 1) / pageSize;

		// 拼写要输出到页面的HTML文本
		StringBuilder sb = new StringBuilder();
		sb.append("<div class=\"row\">");
		
		if (recordCount == 0) {
			sb.append("<div class=\"col-sm-12\"><h4>没有可显示的记录</h4></div></div>");			
		} else {
			sb.append("<div class=\"col-sm-5\"><h4>共").append(recordCount).append("项，").append(pageCount).append("页，当前第").append(pageNo).append("页");
			sb.append("</h4></div><div class=\"col-sm-7\"><ul class=\"pagination no-margin pull-right\">");
			
			// 页号越界处理
			if (pageNo > pageCount) {
				pageNo = pageCount;
			}
			if (pageNo < 1) {
				pageNo = 1;
			}

			// 上一页处理
			if (pageNo == 1) {
				sb.append("<li class=\"paginate_button previous disabled\" ><a href=\"#\">&laquo;&nbsp;上一页</a></li>");
			} else {
				sb.append("<li class=\"paginate_button previous\" ><a href=\"javascript:turnOverPage(").append((pageNo - 1)).append(")\">&laquo;&nbsp;上一页</a></li>");
			}

			// 如果前面页数过多,显示"..."
			int start = 1;
			if (this.pageNo > 4) {
				start = this.pageNo - 1;
				sb.append("<li class=\"paginate_button\"><a href=\"javascript:turnOverPage(1)\" >1</a></li>");
				sb.append("<li class=\"paginate_button\"><a href=\"javascript:turnOverPage(2)\" >2</a></li>");
				sb.append("<li class=\"paginate_button\"><a href=\"#\" >&hellip;</a></li>");
			}

			// 显示当前页附近的页
			int end = this.pageNo + 1;
			if (end > pageCount) {
				end = pageCount;
			}
			for (int i = start; i <= end; i++) {
				if (pageNo == i) { // 当前页号不需要超链接
					sb.append("<li class=\"paginate_button active\"><a href=\"#\" >").append(i).append("</a></li>");
				} else {
					sb.append("<li class=\"paginate_button\"><a href=\"javascript:turnOverPage(").append(i).append(")\">").append(i).append("</a></li>");
				}
			}

			// 如果后面页数过多,显示"..."
			if (end < pageCount - 2) {
				sb.append("<li class=\"paginate_button\"><a href=\"#\" >&hellip;</a></li>");
			}
			if (end < pageCount - 1) {
				sb.append("<li class=\"paginate_button\"><a href=\"javascript:turnOverPage(").append(pageCount - 1).append(")\">").append(pageCount - 1).append("</a></li>");
			}
			if (end < pageCount) {
				sb.append("<li class=\"paginate_button\"><a href=\"javascript:turnOverPage(").append(pageCount).append(")\">").append(pageCount).append("</a></li>");
			}

			// 下一页处理
			if (pageNo == pageCount) {
				sb.append("<li class=\"paginate_button next disabled\" ><a href=\"#\">下一页&nbsp;&raquo;</a></li>");
			} else {
				sb.append("<li class=\"paginate_button\"><a href=\"javascript:turnOverPage(").append((pageNo + 1)).append(")\">下一页&nbsp;&raquo;</a></li>");
			}
			sb.append("</ul></div></div>");
			
			sb.append("<form method=\"post\" action=\"").append(url).append("\" name=\"qPagerForm\" id=\"qPagerForm\">");
			//获取请求中的所有参数  
			HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
			Enumeration<String> enumeration = request.getParameterNames();  
			String name = null;  //参数名  
			String value = null; //参数值  
			
			//把请求中的所有参数当作隐藏表单域  
			while (enumeration.hasMoreElements()) {  
				name =  enumeration.nextElement();  
				value = request.getParameter(name);  
				// 去除页号  
				if (name.equals("pageNo")) {  
					if (null != value && !"".equals(value)) {  
						pageNo = Integer.parseInt(value);  
					}  
					continue;  
				}  
				sb.append("<input type=\"hidden\" name=\"").append(name).append("\" value=\"").append(value).append("\"/>");  
			}
			// 把当前页号设置成请求参数
			sb.append("<input type=\"hidden\" name=\"").append("pageNo").append("\" value=\"").append(pageNo).append("\"/>");
			sb.append("</form>");

		}

		// 把生成的HTML输出到响应中
		try {
			pageContext.getOut().write(sb.toString());
		} catch (Exception e) {
			e.printStackTrace();
		}

		// 本标签主体为空,所以直接跳过主体
		return SKIP_BODY;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public void setPageNo(int pageNo) {
		this.pageNo = pageNo;
	}

	public void setRecordCount(int recordCount) {
		this.recordCount = recordCount;
	}

}
